//程序逻辑控制
public class J4 {
    //顺序结构
    public static void main1(String[] args) {
        System.out.println("aaa");
        System.out.println("bbb");
        System.out.println("ccc");
          //运⾏结果
        // aaa
        // bbb
        // ccc
    }


    //分支结构

    //if语句
    // 推荐⻛格
    //   int x = 10;
    //   if (x == 10) {
    //     //语句1
    //   } else {
    //     // 语句2
    //   }
    public static void main2(String[] args) {
        int score = 92;
        if(score >= 90){
            System.out.println("吃个⼤鸡腿!!!");
        }
        //   if(布尔表达式){
        //      // 语句
        //   }
    }

    public static void main3(String[] args) {
        int score = 92;
        if(score >= 90){
            System.out.println("吃个⼤鸡腿!!!");
        }else{
            System.out.println("挨⼤嘴巴⼦!!!");
        }
        //     if(布尔表达式){
        //      // 语句
        //     }else{
        //      // 语句
        //     }
    }
    public static void main4(String[] args) {
        int score = 92;
        if(score >= 90){
            System.out.println("优秀");
        }else if(score >= 80 && score < 90){
            System.out.println("良好");
        }else if(score >= 70 && score < 80){
            System.out.println("中等");
        }else if(score >= 60 && score < 70){
            System.out.println("及格");
        }else if(score >= 0 && score < 60){
            System.out.println("不及格");
        }else{
            System.out.println("错误数据");
        }
        //     if(布尔表达式){
        //      // 语句
        //     }else if(布尔表达式){
        //      // 语句
        //     }else if(布尔表达式){
        //      // 语句
        //     }else if(布尔表达式){
        //      // 语句
        //     }else if(布尔表达式){
        //      // 语句
        //     }else{
        //      // 语句
        //     }
    }
    //使用注意事项
    public static void main5(String[] args) {
        int x = 20;
        if (x == 10) ;
        {
            System.out.println("hehe");
        }
        // 运⾏结果  hehe
        // 此处多写了⼀个 分号, 导致分号成为了 if 语句的语句体, ⽽ { } 中的代码已经成为了和⼀个 if ⽆关的
    }

    public static void main6(String[] args) {
        int x = 10;
        int y = 10;
        if (x == 10)
            if (y == 20)
                System.out.println("aaa");
        else
                System.out.println("bbb");
        //if / else 语句中可以不加 ⼤括号 . 但是也可以写语句(只能写⼀条语句). 此时 else 是和最接近的 if 匹配
        //悬垂else问题
    }

    //switch语句
    public static void main7(String[] args) {
        // switch(表达式){
        //        case 常量值1:{
        //              语句1;
        //              break;
        //        }
        //        case 常量值2:{
        //              语句2;
        //              break;
        //         }
        //             ...
        //         default:{
        //              内容都不满⾜时执⾏语句;
        //               break;
        //          }
        //  }
        int day = 1;
        switch(day) {
            case 1:
                System.out.println("星期⼀");
                break;
            case 2:
                System.out.println("星期⼆");
                break;
            case 3:
                System.out.println("星期三");
                break;
            case 4:
                System.out.println("星期四");
                break;
            case 5:
                System.out.println("星期五");
                break;
            case 6:
                System.out.println("星期六");
                break;
            case 7:
                System.out.println("星期⽇");
                break;
            default:
                System.out.println("输⼊有误");
                break;
        }
        //多个case后的常量值不可以重复
        //switch的括号内只能是以下类型的表达式：
        // 基本类型：byte、char、short、int，注意不能是long,float、double,boolean
        //引⽤类型：String常量串、枚举类型

        // switch 不能表达复杂的条件
        // 例如: 如果 num 的值在 10 到 20 之间, 就打印 hehe
        // 这样的代码使⽤ if 很容易表达, 但是使⽤ switch 就⽆法表⽰.
        int num = 15;
        if (num > 10 && num < 20) {
            System.out.println("hehe");
        }


        //switch 虽然⽀持嵌套, 但是很丑，⼀般不推荐~
        int x = 1;
        int y = 1;
        switch(x) {
            case 1:
                switch(y) {
                    case 1:
                        System.out.println("hehe");
                        break;
                }
                break;
            case 2:
                System.out.println("haha");
                break;
        }
    }


    //循环结构

    // while 循环
    public static void main8(String[] args) {
    //   while(循环条件) {
    //          循环语句;
    //           }
        //循环条件为 true, 则执⾏循环语句; 否则结束循环.
        //代码⽰例1: 打印 1 - 10 的数字
        int num = 1;
        while (num <= 10) {
               System.out.println(num);
               num++;
        }
    }
    public static void main9(String[] args) {
        //代码⽰例2: 计算 1! + 2! + 3! + 4! + 5!
        int num = 1;
        int sum = 0;
        // 外层循环负责求阶乘的和
        while (num <= 5) {
            int factorResult = 1;
            int tmp = 1;
            // ⾥层循环负责完成求阶乘的细节.
            while (tmp <= num) {
                factorResult *= tmp;
                tmp++;
            }
            sum += factorResult;
            num++;
        }
        System.out.println("sum = " + sum);
    }//sum = 153

    //break(跳出)
    public static void main10(String[] args) {
        //break 的功能是让循环提前结束.
        //代码⽰例: 找到 100 - 200 中第⼀个 3 的倍数
        int num = 100;
        while (num <= 200) {
            if (num % 3 == 0) {
                System.out.println("找到了 3 的倍数, 为:" + num);
                break;
            }
            num++;

        }
        //找到了 3 的倍数, 为:102
        //执⾏到 break 就会让循环结束.
    }

    //continue(跳过)
    public static void main11(String[] args) {
        //continue 的功能是跳过这次循环, ⽴即进⼊下次循环.
        //代码⽰例: 找到 100 - 200 中所有 3 的倍数
        int num = 100;
        while (num <= 200) {
            if (num % 3 != 0) {
                num++; // 这⾥的 ++ 不要忘记! 否则会死循环.
                continue;
            }
            System.out.println("找到了 3 的倍数, 为:" + num);
            num++;
        }
        //执⾏到 continue 语句的时候, 就会⽴刻进⼊下次循环(判定循环条件), 从⽽不会执⾏到下⽅的打印语句.
    }

    //for 循环
    public static void main12(String[] args) {
        //       for(表达式1;布尔表达式2;表达式3){
        //             表达式4;
        //       }
        //计算 1 - 100 的和
        int sum = 0;
        for (int i = 1; i <= 100; i++) {
            sum += i;
        }
        System.out.println("sum = " + sum);
        System.out.println(sum);//sum.sout
        // 执⾏结果sum = 5050
    }
    public static void main13(String[] args) {
        //计算 1! + 2! + 3! + 4! + 5!
        int sum = 0;
        for (int i = 1; i <= 5; i++) {
            int tmp = 1;
            for (int j = 1; j <= i; j++) {
                tmp *= j;
            }
            sum += tmp;
        }
        System.out.println("sum = " + sum);
    }
    //结束单趟循环⽤continue，结束整个循环⽤break


    //do while 循环
    public static void main14(String[] args) {
        //   do{
        //       循环语句;
        //     }while(循环条件);
        //打印 1 - 10
        int num = 1;
        do {
            System.out.println(num);
            num++;
        } while (num <= 10);
    }

    //⼩试⽜⼑
    //1. 判定⼀个数字是否是素数
    //n只能整除1和自身
    public static void main15(String[] args) {
        int n = 9;
        int i = 2;
        for (; i < n-1; i++) {
            if (n%i==0){
                System.out.println("不是素数");
                break;
            }
        }
        if (i > n-1){
            System.out.println("是素数");
        }
    }
    //n=a*b   a必定小于n/2
    public static void main16(String[] args) {
        int n = 9;
        int i = 2;
        for (; i < n/2; i++) {
            if (n%i==0){
                System.out.println("不是素数");
                break;
            }
        }
        if (i > n/2){
            System.out.println("是素数");
        }
    }
    //n=a*b   n=根号n*根号n  a必定小于根号n
    public static void main17(String[] args) {
        int n = 9;
        int i = 2;
        for (; i < Math.sqrt(n); i++) {
            if (n%i==0){
                System.out.println("不是素数");
                break;
            }
        }
        if (i > Math.sqrt(n)){
            System.out.println("是素数");
        }
    }
    //2. 求出0〜999之间的所有“⽔仙花数”并输出。(“⽔仙花数”是指⼀个三位数，其各位数字的⽴⽅
    //和确好等于该数本⾝，如： 153＝1^3＋5^3＋3^3 ，则153是⼀个“⽔仙花数”。)
    public static void main(String[] args) {
        for (int i = 0; i < 999999; i++) {
            //求当前数字是一个几位数
            int count = 0;
            int temp = i;
            while (temp != 0) {
                count++;
                temp /= 10;
            }
            //temp=0 count=3
            temp = i;//123
            int sum = 0;
            while (temp != 0) {
                sum += Math.pow(temp%10,count);
                temp /= 10;
            }
            if (sum == i){
                System.out.println(i);
            }
        }
    }
}
